package hwOne1;

import java.util.Arrays;

/**
 * 作业 1.1.22 1.1.23
 */
public class BinarySearch {

    public static void main(String[] args) {
        // 白名单数组
        int[] whitelist = {1, 3, 5, 7, 9, 11, 13, 15};
        Arrays.sort(whitelist); // 确保白名单有序

        // 标准输入的值
        int[] input = {2, 3, 4, 7, 8, 10};

        // 参数，假设从命令行或其他方式获取，"+"/"-"
        String argument = "+"; // "+"：打印不在白名单中的值；"-"：打印在白名单中的值

        // 遍历输入值，根据参数进行处理
        for (int key : input) {
            boolean isInWhitelist = rank(key, whitelist) != -1; // 判断 key 是否在白名单中

            if (argument.equals("+") && !isInWhitelist) {
                // + 打印不在白名单中的值
                System.out.println(key);
            } else if (argument.equals("-") && isInWhitelist) {
                // - 打印在白名单中的值
                System.out.println(key);
            }
        }
    }

    // 二分查找方法
    public static int rank(int key, int[] array) {
        int lo = 0, hi = array.length - 1;

        while (lo <= hi) {
            int mid = lo + (hi - lo) / 2;
            if (key < array[mid]) {
                hi = mid - 1;
            } else if (key > array[mid]) {
                lo = mid + 1;
            } else {
                return mid; // 找到目标值，返回索引
            }
        }
        return -1; // 未找到目标值
    }
}